home *** CD-ROM | disk | FTP | other *** search
/ mac CD 73 / Image.iso / index / • Newton / Fun / FireWorks 1.1 ƒ / source / spark.def < prev   
Encoding:
Text File  |  1998-12-28  |  1.9 KB  |  104 lines  |  [TEXT/NTP1]

  1. /*====================================================================
  2.     spark.def    ©1998 rryu.
  3.  
  4.     spark defineition
  5.  
  6.   ====================================================================*/
  7.  
  8. // Picts
  9. rf := OpenResFileX(HOME & "resource");
  10.  
  11.     DefConst('kDot1WPICT,GetPictAsBits("dot1w",nil));
  12.     DefConst('kDot2WPICT,GetPictAsBits("dot2w",nil));
  13.  
  14. CloseResFileX(rf);
  15.  
  16.  
  17. //
  18. // nomal spark
  19. //
  20. DefConst('kSpark,
  21. {
  22.     init: func(ax,ay,adir,aspeed,alife,pict)
  23.     begin
  24.         self.x        := ax << kPtPos;
  25.         self.y        := ay << kPtPos;
  26.         self.dir    := adir;
  27.         self.speed    := aspeed;
  28.         self.life    := alife;
  29.         self.live    := true;
  30.  
  31.         self.pict    := pict;
  32.  
  33.     end,
  34.  
  35.     update: func(view)
  36.     begin
  37.         x := x + ((speed * call kFixedCos with (dir)) >> kPtPos);
  38.         y := y + ((speed * call kFixedSin with (dir)) >> kPtPos) + 500;
  39.  
  40.         speed :=  speed - 100;
  41.         if speed < 0 then speed := 0;
  42.  
  43.         life := life - 1;
  44.         if life <= 0 then live := nil;
  45.  
  46.         view:CopyBits(pict,x >> kPtPos,y >> kPtPos,modeCopy);
  47.     end,
  48. });
  49.  
  50.  
  51. //
  52. // comet spark
  53. //
  54. DefConst('kComet,
  55. {
  56.     init: func(ax,ay,adir,aspeed,alife)
  57.     begin
  58.         self.x        := ax << kPtPos;
  59.         self.y        := ay << kPtPos;
  60.         self.dir    := adir;
  61.         self.speed    := aspeed;
  62.         self.life    := alife;
  63.         self.live    := true;
  64.  
  65.         self.lx := Array(20,ax);
  66.         self.ly := Array(20,ay);
  67.         self.head := 20 - 1;
  68.         self.tail := 0;
  69.  
  70.         self.dy := 0;
  71.     end,
  72.  
  73.     update: func(view)
  74.     begin
  75.         x := x + ((speed * call kFixedCos with (dir)) >> kPtPos);
  76.         y := y + ((speed * call kFixedSin with (dir)) >> kPtPos) + dy;
  77.         dy := dy + 120;
  78.  
  79.         speed :=  speed - 100;
  80.         if speed < 0 then speed := 0;
  81.  
  82.         life := life - 1;
  83.         if life <= 0 then live := nil;
  84.  
  85.         lx[head] := x >> kPtPos;
  86.         ly[head] := y >> kPtPos;
  87.  
  88.         head := (head+1) mod 20;
  89.         tail := (tail+1) mod 20;
  90.  
  91.         local pts := Array(10,0);
  92.         local i := head;
  93.         for j:= 0 to 8 by 2 do
  94.         begin
  95.             pts[j] := lx[i];
  96.             pts[j+1] := ly[i];
  97.             i := (i+4) mod 20
  98.         end;
  99.  
  100.         view:DrawShape(MakePolygon(pts),{transferMode: modeNotCopy});
  101.     end,
  102. });
  103.  
  104.